package ui.listeners;

import java.io.File;

import org.apache.pivot.collections.Sequence;
import org.apache.pivot.wtk.Action;
import org.apache.pivot.wtk.Component;
import org.apache.pivot.wtk.FileBrowserSheet;
import org.apache.pivot.wtk.Sheet;
import org.apache.pivot.wtk.SheetCloseListener;

import ui.sheet.AsciiImportSheet;
import ui.window.MDKWindow;

/**
 * Gestionnaire d'evenement de la barre de menus
 * @author Ganne
 */
public class MenuBarListener {
	/**
	 * L'application contenant la barre de menus
	 */
	private MDKWindow appli;
	
	/**
	 * Constructeur du gestionnaire d'evenements de la barre de menus
	 * @param application: L'application contenant la barre de menus
	 */
	public MenuBarListener(MDKWindow application){
		appli = application;
		
		gereActionOpen();
		gereActionNew();
		gereActionSave();
		gereActionSaveAs();
		gereActionExportXMLDrummer();
		gereActionExportAllXMLDrummer();
	}
	
	/**
	 * Methode gerant l'action "open" generee lorsque l'utilisateur souhaite
	 * ouvrir un fichier dans l'editeur de l'application
	 */
	private void gereActionOpen(){
		//ACTION OPEN : OUVERTURE D'UN FICHIER TEXTUEL DANS L'EDITEUR (PEUT OUVRIR UN NOUVEL ONGLET)
		Action.getNamedActions().put("open", new Action() {
            
            public void perform(Component source) {
            	FileBrowserSheet.Mode fileBrowserSheetMode = FileBrowserSheet.Mode.valueOf("OPEN");
            	final FileBrowserSheet fileBrowserSheet = new FileBrowserSheet();

            	fileBrowserSheet.setMode(fileBrowserSheetMode);
            	fileBrowserSheet.open(appli.getWindow(), new SheetCloseListener() {
            		
					public void sheetClosed(Sheet sheet) {
            			if (sheet.getResult()) {
            				Sequence<File> selectedFiles = fileBrowserSheet.getSelectedFiles();
            				
            				for(int i=0; i<selectedFiles.getLength();i++)
            					appli.loadFile(selectedFiles.get(i));
            			}
            		}
            	});
            }
        });
	}
	
	/**
	 * Methode gerant l'action "new" generee lorsque l'utilisateur souhaite
	 * ouvrir un nouvel onglet dans l'editeur de l'application
	 */
	private void gereActionNew(){
		//ACTION NEW : OUVERTURE D'UN NOUVEL ONGLET VIDE DANS L'EDITEUR
		Action.getNamedActions().put("new", new Action() {
            
            public void perform(Component source) {
            	appli.newFile();
            }
        });
	}
	
	/**
	 * Methode gerant l'action "save" generee lorsque l'utilisateur souhaite
	 * enregistrer le fichier actif dans l'editeur de l'application
	 */
	private void gereActionSave(){
		//ACTION SAVE : SAUVEGARDE D'UN FICHIER TEXTUEL SUR LE DISQUE (OUVRE UNE BOITE DE 
		//DIALOGUE SI LE FICHIER NE POSSEDE PAS D'EMPLACEMENT DISQUE)
		Action.getNamedActions().put("save", new Action() {
            
            public void perform(Component source) {
                appli.saveFile();
            }
        });
	}
	
	/**
	 * Methode gerant l'action "saveAs" generee lorsque l'utilisateur souhaite
	 * enregistrer le fichier actif dans l'editeur de l'application
	 */
	private void gereActionSaveAs(){
		//ACTION SAVE AS : SAUVEGARDE D'UN FICHIER TEXTUEL SUR LE DISQUE (OUVRE UNE BOITE DE 
		//DIALOGUE POUR DETERMINER LE NOM ET L'EMPLACEMENT DU FICHIER SUR LE DISQUE)
		Action.getNamedActions().put("saveAs", new Action() {
            @Override
            public void perform(Component source) {
            	FileBrowserSheet.Mode fileBrowserSheetMode = FileBrowserSheet.Mode.valueOf("SAVE_AS");
            	final FileBrowserSheet fileBrowserSheet = new FileBrowserSheet();

            	fileBrowserSheet.setMode(fileBrowserSheetMode);
            	fileBrowserSheet.open(appli.getWindow(), new SheetCloseListener() {
            		
					public void sheetClosed(Sheet sheet) {
            			if (sheet.getResult()) {
            				Sequence<File> selectedFiles = fileBrowserSheet.getSelectedFiles();
            				appli.saveFileAs(selectedFiles.get(0));
            			}
            		}
            	});
            }
        });
	}
	
	/**
	 * Methode gerant l'action "conv_drum_exp" generee lorsque l'utilisateur souhaite
	 * convertir le fichier actif dans l'editeur de l'application au format XML_Drummer
	 */
	private void gereActionExportXMLDrummer(){
		//ACTION EXPORT XML_DRUMMER : CONVERSION DU FICHIER ACTUEL AU FORMAT XML_DRUMMER
		Action.getNamedActions().put("conv_drum_exp", new Action() {
            @Override
            public void perform(Component source) {
            	FileBrowserSheet.Mode fileBrowserSheetMode = FileBrowserSheet.Mode.valueOf("SAVE_AS");
            	final FileBrowserSheet fileBrowserSheet = new FileBrowserSheet();

            	fileBrowserSheet.setMode(fileBrowserSheetMode);
            	fileBrowserSheet.open(appli.getWindow(), new SheetCloseListener() {
        
					public void sheetClosed(Sheet sheet) {
            			if (sheet.getResult()) {
            				Sequence<File> selectedFiles = fileBrowserSheet.getSelectedFiles();
            				appli.saveFileAs(selectedFiles.get(0));
            			}
            		}
            	});
            }
        });
	}
	
	/**
	 * Methode gerant l'action "conv_drum_exp" generee lorsque l'utilisateur souhaite
	 * convertir l'ensemble des fichier ouverts dans l'editeur de l'application 
	 * au format XML_Drummer
	 * NOT IMPLEMENTED
	 */
	private void gereActionExportAllXMLDrummer(){
		//ACTION EXPORT XML_DRUMMER GENERAL : EXPORT DES FICHIER OUVERTS AU FORMAT XML_DRUMMER
		Action.getNamedActions().put("conv_drum_expall", new Action() {
            @Override
            public void perform(Component source) {
            	AsciiImportSheet sheet = new AsciiImportSheet();
            	sheet.open(appli.getWindow(), new SheetCloseListener() {
					public void sheetClosed(Sheet arg0) {
						
					}
				});
            }
        });
	}
}
